package beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;
import org.primefaces.model.SelectableDataModel;

import util.HibernateUtil;
import controlador.Principal;
import model.CursoPeriodo;
import model.Permiso;
import model.Profesor;

public class PermisosBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String codProfesor;
	private String codCurso;

	private Profesor profesor;
	private CursoPeriodo cursoPeriodo;

	private Profesor profesorSelec;
	private CursoPeriodo cursoPeriodoSelec;

	public List<CursoPeriodo> cursosPeriodo;
	public List<Profesor> profesores;

	public List<CursoPeriodo> cursosPeriodoFiltrados;
	public List<Profesor> profesoresFiltrados;

	public String getCodProfesor() {
		return codProfesor;
	}

	public void setCodProfesor(String codProfesor) {
		this.codProfesor = codProfesor;
	}

	public PermisosBean() {
		super();
		//HibernateUtil.iniciarSession();
		System.out.println("CURSOS PERIODO!!!!! CARGANDO ");
		cursosPeriodo = new ArrayList<CursoPeriodo>();
		cursosPeriodo = Principal.listarCursosPeriodoAll();

		System.out.println("PROFESORES!!!!! CARGANDO ");
		profesores = new ArrayList<Profesor>();
		profesores = Principal.listarProfesoresAll();

		profesorSelec = new Profesor();
		cursoPeriodoSelec = new CursoPeriodo();

	}

	public void guardarPermisos(ActionEvent actionEvent) {

		profesor = new Profesor();
		cursoPeriodo = new CursoPeriodo();

		profesor = Principal.obtenerProfesor(codProfesor);
		cursoPeriodo = Principal.obtenerCursoPeriodo(codCurso);
		FacesContext context = FacesContext.getCurrentInstance();
		if (profesor == null || cursoPeriodo == null) {

			if (profesor == null) {
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error",
						"codigo de Profesor incorrecto"));
			}
			if (cursoPeriodo == null) {
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error",
						"codigo deCurso incorrecto"));
			}
		} else {
			int id = Principal.obtenerIdPermiso();
			Permiso perm = new Permiso(id, this.cursoPeriodo, this.profesor);
			Principal.grabaPermisos(perm);
			context.addMessage(null, new FacesMessage("Permiso Guardado: ",
					"Profesor: " + profesor.getPersona().getApellidos() + " "
							+ profesor.getPersona().getApellidos()
							+ " al curso: "
							+ cursoPeriodo.getCurso().getNombre()));
			
		}
	}

	public String getCodCurso() {
		return codCurso;
	}

	public void setCodCurso(String codCurso) {
		this.codCurso = codCurso;
	}

	public Profesor getProfesor() {
		return profesor;
	}

	public void setProfesor(Profesor profesor) {
		this.profesor = profesor;
	}

	public CursoPeriodo getCursoPeriodo() {
		return cursoPeriodo;
	}

	public void setCursoPeriodo(CursoPeriodo curso) {
		this.cursoPeriodo = curso;
	}

	public List<Profesor> getProfesores() {
		return profesores;
	}

	public void setProfesores(List<Profesor> profesores) {
		this.profesores = profesores;
	}

	public void setCursosPeriodo(List<CursoPeriodo> cursos) {
		this.cursosPeriodo = cursos;
	}

	public List<CursoPeriodo> getCursosPeriodo() {
		return Principal.listarCursosPeriodoAll();
	}

	public Profesor getProfesorSelec() {
		return profesorSelec;
	}

	public void setProfesorSelec(Profesor profesorSelec) {
		this.profesorSelec = profesorSelec;
	}

	public CursoPeriodo getCursoPeriodoSelec() {
		return cursoPeriodoSelec;
	}

	public void setCursoPeriodoSelec(CursoPeriodo cursoPeriodoSelec) {
		this.cursoPeriodoSelec = cursoPeriodoSelec;
		System.out.println("CURSOSS PERIODO SELECCIONADO!!!: "
				+ this.cursoPeriodoSelec.getCurso().getNombre());
	}

	public List<CursoPeriodo> getCursosPeriodoFiltrados() {
		return cursosPeriodoFiltrados;
	}

	public void setCursosPeriodoFiltrados(
			List<CursoPeriodo> cursosPeriodoFiltrados) {
		this.cursosPeriodoFiltrados = cursosPeriodoFiltrados;
	}

	public List<Profesor> getProfesoresFiltrados() {
		return profesoresFiltrados;
	}

	public void setProfesoresFiltrados(List<Profesor> profesoresFiltrados) {
		this.profesoresFiltrados = profesoresFiltrados;
	}

	public void onRowSelect2(SelectEvent event) {
		FacesMessage msg = new FacesMessage("Curso Seleccionado: ",
				((CursoPeriodo) event.getObject()).getCurso().getNombre());
		this.codCurso = this.cursoPeriodoSelec.getCursoPeriodoId();
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

	public void onRowUnselect2(UnselectEvent event) {
		FacesMessage msg = new FacesMessage("Curso Seleccionado: ",
				((CursoPeriodo) event.getObject()).getCurso().getNombre());
		this.codCurso = this.cursoPeriodoSelec.getCursoPeriodoId();
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

	public void onRowSelect(SelectEvent event) {
		FacesMessage msg = new FacesMessage("Profesor Seleccionado: ",
				((Profesor) event.getObject()).getPersona().getApellidos()
						+ " , "
						+ ((Profesor) event.getObject()).getPersona()
								.getNombres());
		this.codProfesor = this.profesorSelec.getDocenteId();
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

	public void onRowUnselect(UnselectEvent event) {
		FacesMessage msg = new FacesMessage("Profesor Seleccionado: ",
				((Profesor) event.getObject()).getPersona().getApellidos()
						+ " , "
						+ ((Profesor) event.getObject()).getPersona()
								.getNombres());
		this.codProfesor = this.profesorSelec.getDocenteId();
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

}
